// #include "../common/etcd.hpp"
// #include <brpc/server.h>
// #include <butil/logging.h>
// #include <gflags/gflags.h>
// #include <thread>
// #include "main.pb.h"
// DEFINE_bool(run_mode, false, "程序运行模式:true为发布模式,false为调试模式");
// DEFINE_string(log_file, "", "发布模式中,用于存放日志的文件路径");
// DEFINE_int32(log_level, 0, "发布模式中,日志输出等级");
// DEFINE_string(etcd_host, "http://127.0.0.1:2379", "服务注册中心地址");
// DEFINE_string(base_service, "/service", "服务监控根目录");
// DEFINE_string(instance_name, "echo/instance", "服务实例名称");
// DEFINE_string(access_host,"127.0.0.1:8080","当前实例外部访问地址");
// DEFINE_int32(listen_port,7070,"RPC服务器监听端口");//可以发现，这台主机既是rpc服务的服务端，也是etcd的客户端。所谓注册服务，就是告诉etcd服务端“我可以提供某某服务”
// // 继承EchoService，并实现rpc调用的业务功能
// class EchoServiceImpl : public example::EchoService
// {
// public:
//     virtual void Echo(::google::protobuf::RpcController *controller,
//                       const example::EchoRequest *request,
//                       example::EchoResponse *response,
//                       ::google::protobuf::Closure *done)
//     {
//         brpc::ClosureGuard done_guard(done);//echo就是客户端发给客户端要求远程处理的函数。按理说，会调用一个run()才会把结果发出去，但是为了忘了，可以用done_guard，这样函数结束会自动运行run()，类似智能指针
//         std::cout <<"收到消息" <<request->message()<< std::endl;
//         std::string str = "hello, " + request->message();
//         response->set_message(str);
//     }
// };

// int main(int argc, char *argv[])
// {
//     google::ParseCommandLineFlags(&argc, &argv, true);
//     init_logger(FLAGS_run_mode, FLAGS_log_file, FLAGS_log_level);
    

  

//     //联调测试：
//   //关闭brpc的默认日志输出
//     logging::LoggingSettings settings;
//     settings.logging_dest = logging::LoggingDestination::LOG_TO_NONE;
//     logging::InitLogging(settings);//固定套路了
//     brpc::Server server;
//     //向服务器对象中，添加服务。因为一个服务器其实可以提供多个服务
//     EchoServiceImpl echo_service_impl;
//     server.AddService(&echo_service_impl, brpc::SERVER_DOESNT_OWN_SERVICE);//因为是局部变量，因此不需要释放，因此我们设置成SERVER_DOESNT_OWN_SERVICE，表示“我们自己管理，不需要别人”
//     brpc:: ServerOptions options;
//     options.idle_timeout_sec = -1;//设置空闲超时时间,-1表示永远不关闭
//     options.num_threads = 1;//设置线程数
//     int ret = server.Start(FLAGS_listen_port, &options);//启动服务器，8080表示端口
//     if(ret ==-1)
//     {
//         std::cout << "启动失败" << std::endl;
//         return -1;
//     }

//     //注册服务
//     Registrant::ptr rclient = std::make_shared<Registrant>(FLAGS_etcd_host);
//     //注册的时候肯定是echo/instance，是一个实例；但是发现的时候时候/echo，因为不关心是哪个实例
//     rclient->resigter(FLAGS_base_service + FLAGS_instance_name,FLAGS_access_host);

//     server.RunUntilAskedToQuit();//休眠等待客户端发送信息，然后就不断执行

//     std::this_thread::sleep_for(std::chrono::seconds(600));
// }
